package com.rt.easyjava.common.service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.rt.easyjava.common.base.Result;

import java.io.Serializable;
import java.util.List;

/**
 * 事件记录表 服务类
 * @author wuxiaoyong
 * @since 2020-08-02
 */
public interface IBaseService<B, D> extends IService<B> {

    // ======================================================================
    // ========== 以下使用的是 Mybatis-plus 实现 ==============================
    // ======================================================================
    Result<D> create(D dto, Class<B> beanClass);

    Result<D> update(D dto, UpdateWrapper updateWrapper, Class<B> beanClass);

    Result<D> page(Page<B> page, QueryWrapper<B> queryWrapper, Class<D> dtoClass);

    Result<D> selectBy(QueryWrapper<B> queryWrapper, Class<D> dtoClass);

    Result<D> selectById(Serializable id, Class<D> dtoClass);


    B selectByKey(String columnName, String key);

    List<B> selectListByKey(String columnName, String key);

    Result<D> selectDtoListByKey(String columnName, String key, Class<D> dtoClass);



    // ======================================================================
    // ========== 以下使用的是自定义的 mapper.xml 实现 =========================
    // ======================================================================
    Result<D> myPage(Page<B> page, QueryWrapper<B> queryWrapper, Class<D> dtoClass);
    Result<D> myPage(Page<B> page, QueryWrapper<B> queryWrapper, Boolean hasFooter, Class<D> dtoClass);

    Result<D> mySelectBy(QueryWrapper<B> queryWrapper, Class<D> dtoClass);

    Result<D> mySelectById(Serializable id, Class<D> dtoClass);

}
